﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Configuration;
using System.Text;
using System.IO;
using SegIdenPC.Entidad;
using SegIdenPC.Herramientas;
using SegIdenPC;

namespace SegIdenPC.Helper
{
    /// <summary>
    /// Clase       : EmailHelper
    /// Descripcion : Permite enviar correos
    /// Autor       : Pedro Miguel Vera Rafael
    /// Fecha       : 06/07/2012
    /// Empresa     : GS1 Peru
    /// <summary>
    public class EmailHelper
    {

        #region --- Variables ---
        // Parametros de Correo
        private const string SERVIDOR_SMTP = "ServidorSMTP";
        private const string SERVIDOR_PUERTO = "ServidorPuerto";
        private const string SERVIDOR_SSL = "ServidorSSL";

        private const string CORREO_DIRECCION = "CorreoDireccion";
        private const string CORREO_DIRECCION_NOMBRE = "CorreoDireccionNombre";

        private const string CORREO_USUARIO = "CorreoUsuario";
        private const string CORREO_CLAVE = "CorreoClave";
        private const string CORREO_ENCODING = "CorreoEncoding";

        private const string CORREO_ASUNTO = "CorreoAsunto";
        private const string CORREO_CONTENIDO = "CorreoContenido";
        private const string CORREO_CONTENIDO1 = "CorreoContenido1";
        private const string CORREO_CONTENIDO2 = "CorreoContenido2";

        private const string NOMBRE_TAG_TOKENCARDS = "{TOKENCARDS}";

        #endregion

        #region --- Metodos Propios ---
        public static bool enviarNotificacion(String tituloCorreo, ListaUsuario listaEmail, String NombreCliente, String ListaItem) //CuerpoMensajeEnviado
        {
            bool resultado = false;
            SmtpClient correoCliente = null;
            MailMessage correoMensaje = null;

            try
            {
                // Se instancia variables del cliente y mensaje de correo
                correoCliente = new SmtpClient();
                correoMensaje = new MailMessage();

                // Correo de Princial Cards
                correoMensaje.From = new MailAddress(ConfigurationManager.AppSettings[CORREO_DIRECCION],
                                                     ConfigurationManager.AppSettings[CORREO_DIRECCION_NOMBRE]);

                // Se establece el asunto del Correo
                correoMensaje.Subject = tituloCorreo;

                // Se establece Correo de responsables
                foreach (Usuario email in listaEmail.lista)
                {
                    // Se establece Correo de responsables
                    correoMensaje.To.Add(new MailAddress(email.email));
                }
                
                // Se establece alta prioridad al correo
                correoMensaje.Priority = MailPriority.High;

                // Se establece el formato del encoding del cuerpo y asunto
                correoMensaje.BodyEncoding = System.Text.Encoding.UTF8;
                correoMensaje.SubjectEncoding = System.Text.Encoding.UTF8;

                // Se establece que cuerpo del mensaje acepta HTML
                correoMensaje.IsBodyHtml = true; //false
  
                // Se establece los datos del cuerpo
                correoMensaje.Body = "<h4>Estimada: "+ NombreCliente + ",<h4/><br><p>Su préstamo de los siguientes productos ha vencido: <p/><br><p>" + ListaItem + "<p/><br><p>Saludos cordiales<p><br/>";

                //LinkedResource logo = new LinkedResource(@"D:\workspace\Versiones Junio 1\1-0807\AppPCCD\SegIdenPC\SegIdenPC\SegIdenPC\Resources\logo.png");
               // logo.ContentId = "buayacorp_logo";
               // correoMensaje.LinkedResources.Add(logo);


                // Se establecen Parametros del servidor de correos
                correoCliente.Host = ConfigurationManager.AppSettings[SERVIDOR_SMTP];
                correoCliente.Port = Convert.ToInt32(ConfigurationManager.AppSettings[SERVIDOR_PUERTO]);
                correoCliente.EnableSsl = ConfigurationManager.AppSettings[SERVIDOR_SSL].ToString().Equals(Constantes.SI) ? true : false;
                correoCliente.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings[CORREO_USUARIO],
                                                                             ConfigurationManager.AppSettings[CORREO_CLAVE]);

                // Ejecucion de envio de Correo
                correoCliente.Send(correoMensaje);
                resultado = true;

            }
            finally { correoCliente = null; correoMensaje = null; }

            return resultado;
        }
        #endregion
    }
}
